Sukurkite patikimą rekomendacijų sistemą naudojant Python ir matricos faktorizaciją. Šis vadovas apima teoriją, įgyvendinimą ir optimizavimą globalioms programoms.
Python Rekomendacijų Sistema: Matricos Faktorizacijos Paaiškinimas
Šiuolaikiniame duomenimis grįstame pasaulyje rekomendacijų sistemos yra visur. Nuo produktų siūlymo e. prekybos platformose, tokiose kaip „Amazon“ ir „Alibaba“, iki filmų rekomendavimo „Netflix“ ar dainų „Spotify“, šios sistemos personalizuoja vartotojų patirtį ir skatina įsitraukimą. Šiame straipsnyje pateikiamas išsamus vadovas, kaip sukurti rekomendacijų sistemą naudojant „Python“ ir galingą techniką, vadinamą matricos faktorizacija.
Kas yra Rekomendacijų Sistema?
Rekomendacijų sistema yra informacijos filtravimo sistemos tipas, kuris numato vartotojo pageidavimus ir siūlo elementus ar turinį, kuris vartotojams galėtų būti įdomus. Pagrindinė idėja yra suprasti vartotojo praeities elgseną (pvz., pirkimus, vertinimus, naršymo istoriją) ir naudoti šią informaciją, siekiant prognozuoti jo ateities pageidavimus.
Rekomendacijų Sistemų Tipai:
- Turiniu pagrįstas filtravimas: Rekomenduoja elementus, panašius į tuos, kuriuos vartotojas mėgo praeityje. Pavyzdžiui, jei vartotojas mėgsta žiūrėti dokumentinius filmus apie istoriją, sistema gali rekomenduoti kitus istorinius dokumentinius filmus.
- Kolaboratyvinis filtravimas: Rekomenduoja elementus, atsižvelgiant į panašaus skonio vartotojų pageidavimus. Jei du vartotojai gerai įvertino panašius elementus, o vienam iš jų patinka naujas elementas, sistema gali rekomenduoti šį elementą kitam vartotojui.
- Hibridiniai metodai: Derina turiniu pagrįstą ir kolaboratyvinį filtravimą, kad išnaudotų abiejų privalumus.
Matricos Faktorizacija: Galinga Kolaboratyvinio Filtravimo Technika
Matricos faktorizacija yra galinga kolaboratyvinio filtravimo technika, naudojama atrasti paslėptus bruožus, kurie paaiškina stebimus vertinimus. Pagrindinė idėja yra išskaidyti vartotojo-prekės sąveikos matricą į dvi mažesnės dimensijos matricas: vartotojo matricą ir prekės matricą. Šios matricos atspindi pagrindinius ryšius tarp vartotojų ir prekių.
Matematikos Supratimas už Matricos Faktorizacijos
Pažymėkime vartotojo-prekės sąveikos matricą kaip R, kur Rui reiškia vartotojo u suteiktą įvertinimą prekei i. Matricos faktorizacijos tikslas yra aproksimuoti R kaip dviejų matricų sandaugą:
R ≈ P x QT
- P yra vartotojo matrica, kur kiekviena eilutė atspindi vartotoją, o kiekvienas stulpelis – paslėptą bruožą.
- Q yra prekės matrica, kur kiekviena eilutė atspindi prekę, o kiekvienas stulpelis – paslėptą bruožą.
- QT yra prekės matricos transpozicija.
Skaliarinė eilutės iš P (atspindinčios vartotoją) ir eilutės iš Q (atspindinčios prekę) sandauga aproksimuoja įvertinimą, kurį tas vartotojas suteiktų tai prekei. Tikslas yra išmokti matricas P ir Q taip, kad skirtumas tarp prognozuojamų įvertinimų (P x QT) ir faktinių įvertinimų (R) būtų minimalus.
Dažniausi Matricos Faktorizacijos Algoritmai
- Singuliariosios Vertės Skaidymas (SVD): Klasikinė matricos faktorizacijos technika, kuri išskaido matricą į tris matricas: U, Σ ir VT. Rekomendacijų sistemų kontekste SVD gali būti naudojamas vartotojo-prekės įvertinimų matricos faktorizacijai. Tačiau SVD reikalauja, kad matrica būtų tanki (t. y., be trūkstamų verčių). Todėl dažnai naudojamos technikos, tokios kaip imputacija, siekiant užpildyti trūkstamus įvertinimus.
- Neigiamųjų Reikšmių Neturinti Matricos Faktorizacija (NMF): Matricos faktorizacijos technika, kurioje matricos P ir Q yra apribotos būti neigiamos. NMF ypač naudinga dirbant su duomenimis, kur neigiamos vertės neturi prasmės (pvz., dokumentų temų modeliavimas).
- Tikimybinė Matricos Faktorizacija (PMF): Tikimybinis požiūris į matricos faktorizaciją, kuris daro prielaidą, kad vartotojo ir prekės paslėptieji vektoriai yra paimti iš Gauso skirstinių. PMF suteikia principingą būdą valdyti neapibrėžtumą ir gali būti išplėstas, įtraukiant papildomą informaciją (pvz., vartotojo atributus, prekės savybes).
Rekomendacijų Sistemos Kūrimas su Python: Praktinis Pavyzdys
Panagrinėkime praktinį pavyzdį, kaip sukurti rekomendacijų sistemą naudojant „Python“ ir „Surprise“ biblioteką. „Surprise“ yra „Python“ scikit, skirtas kurti ir analizuoti rekomendavimo sistemas. Ji suteikia įvairius kolaboratyvinio filtravimo algoritmus, įskaitant SVD, NMF ir PMF.
„Surprise“ Bibliotekos Įdiegimas
Pirmiausia turite įdiegti „Surprise“ biblioteką. Tai galite padaryti naudodami pip:
pip install scikit-surprise
Duomenų Įkėlimas ir Paruošimas
Šiam pavyzdžiui naudosime „MovieLens“ duomenų rinkinį, kuris yra populiarus duomenų rinkinys rekomendacijų algoritmams vertinti. „Surprise“ biblioteka suteikia integruotą palaikymą „MovieLens“ duomenų rinkiniui įkelti.
from surprise import Dataset
from surprise import Reader
# Load the MovieLens 100K dataset
data = Dataset.load_builtin('ml-100k')
Jei turite savo duomenis, galite juos įkelti naudodami Reader klasę. Reader klasė leidžia nurodyti jūsų duomenų failo formatą.
from surprise import Dataset
from surprise import Reader
# Define the format of your data file
reader = Reader(line_format='user item rating', sep=',', rating_scale=(1, 5))
# Load your data file
data = Dataset.load_from_file('path/to/your/data.csv', reader=reader)
Modelio Mokymas
Dabar, kai įkėlėme ir paruošėme duomenis, galime apmokyti modelį. Šiame pavyzdyje naudosime SVD algoritmą.
from surprise import SVD
from surprise.model_selection import train_test_split
# Split the data into training and testing sets
trainset, testset = train_test_split(data, test_size=0.25)
# Initialize the SVD algorithm
algo = SVD()
# Train the algorithm on the training set
algo.fit(trainset)
Prognozių Darymas
Apmokius modelį, galime daryti prognozes testavimo rinkinyje.
# Make predictions on the testing set
predictions = algo.test(testset)
# Print the predictions
for prediction in predictions:
print(prediction)
Kiekvienas prognozės objektas turi vartotojo ID, prekės ID, faktinį įvertinimą ir prognozuojamą įvertinimą.
Modelio Vertinimas
Norėdami įvertinti modelio našumą, galime naudoti metrikas, tokias kaip vidutinė kvadratinė paklaida (RMSE) ir vidutinė absoliutinė paklaida (MAE).
from surprise import accuracy
# Compute RMSE and MAE
accuracy.rmse(predictions)
accuracy.mae(predictions)
Rekomendacijų Teikimas Konkrečiam Vartotojui
Norėdami teikti rekomendacijas konkrečiam vartotojui, galime naudoti algo.predict() metodą.
# Get the user ID
user_id = '196'
# Get the item ID
item_id = '302'
# Predict the rating
prediction = algo.predict(user_id, item_id)
# Print the predicted rating
print(prediction.est)
Tai prognozuos įvertinimą, kurį vartotojas '196' suteiktų prekei '302'.
Norėdami rekomenduoti vartotojui N geriausių prekių, galite iteruoti per visas prekes, kurių vartotojas dar neįvertino, ir prognozuoti jų įvertinimus. Tada galite surūšiuoti prekes pagal prognozuojamus įvertinimus ir pasirinkti N geriausių prekių.
from collections import defaultdict
def get_top_n_recommendations(predictions, n=10):
"""Return the top N recommendations for each user from a set of predictions."""
# First map the predictions to each user.
top_n = defaultdict(list)
for uid, iid, true_r, est, _ in predictions:
top_n[uid].append((iid, est))
# Then sort the predictions for each user and retrieve the k highest ones.
for uid, user_ratings in top_n.items():
user_ratings.sort(key=lambda x: x[1], reverse=True)
top_n[uid] = user_ratings[:n]
return top_n
top_n = get_top_n_recommendations(predictions, n=10)
# Print the recommended items for each user
for uid, user_ratings in top_n.items():
print(uid, [iid for (iid, _) in user_ratings])
Rekomendacijų Sistemos Optimizavimas
Yra keletas būdų, kaip optimizuoti rekomendacijų sistemos našumą:
Hiperparametrų Derinimas
Dauguma matricos faktorizacijos algoritmų turi hiperparametrus, kuriuos galima derinti siekiant pagerinti našumą. Pavyzdžiui, SVD algoritmas turi tokius hiperparametrus kaip faktorių skaičius (n_factors) ir mokymosi greitis (lr_all). Galite naudoti technikas, tokias kaip tinklo paieška (grid search) ar atsitiktinė paieška (randomized search), kad rastumėte optimalius hiperparametrus.
from surprise.model_selection import GridSearchCV
# Define the parameters to tune
param_grid = {
'n_factors': [50, 100, 150],
'lr_all': [0.002, 0.005, 0.01],
'reg_all': [0.02, 0.05, 0.1]
}
# Perform grid search
gs = GridSearchCV(SVD, param_grid, measures=['rmse', 'mae'], cv=3)
gs.fit(data)
# Print the best parameters
print(gs.best_params['rmse'])
# Print the best score
print(gs.best_score['rmse'])
Reguliarizacija
Reguliarizacija yra technika, naudojama siekiant išvengti persimokymo. Persimokymas įvyksta, kai modelis per gerai išmoksta mokymo duomenis ir prastai veikia su nematytais duomenimis. Dažniausios reguliarizacijos technikos apima L1 reguliarizaciją ir L2 reguliarizaciją. „Surprise“ biblioteka teikia integruotą reguliarizacijos palaikymą.
„Šalto Starto“ Problemos Sprendimas
„Šalto starto“ problema kyla, kai sistema turi ribotą arba jokios informacijos apie naujus vartotojus ar naujas prekes. Dėl to gali būti sunku pateikti tikslias rekomendacijas. Yra keletas technikų, kaip spręsti „šalto starto“ problemą:
- Turiniu pagrįstas filtravimas: Naudokite turiniu pagrįstą filtravimą, kad rekomenduotumėte prekes pagal jų savybes, net jei vartotojas su jomis anksčiau nesąveikavo.
- Hibridiniai metodai: Derinkite kolaboratyvinį filtravimą su turiniu pagrįstu filtravimu, kad išnaudotumėte abiejų privalumus.
- Žiniomis pagrįstos rekomendacijos: Naudokite aiškias žinias apie vartotojus ir prekes, kad teiktumėte rekomendacijas.
- Populiarumu pagrįstos rekomendacijos: Naujiems vartotojams rekomenduokite populiariausias prekes.
Mastelio Keitimas
Dideliems duomenų rinkiniams matricos faktorizacija gali būti skaičiavimo požiūriu brangi. Yra keletas technikų, kaip pagerinti matricos faktorizacijos mastelio keitimą:
- Paskirstytieji skaičiavimai: Naudokite paskirstytųjų skaičiavimų sistemas, tokias kaip „Apache Spark“, kad paraleluotumėte skaičiavimus.
- Mėginių ėmimas: Naudokite mėginių ėmimo technikas, kad sumažintumėte duomenų rinkinio dydį.
- Aproksimavimo algoritmai: Naudokite aproksimavimo algoritmus, kad sumažintumėte skaičiavimo sudėtingumą.
Pritaikymas Realiame Pasaulyje ir Globalūs Aspektai
Matricos faktorizacijos rekomendacijų sistemos naudojamos įvairiose pramonės šakose ir programose. Štai keletas pavyzdžių:
- E. prekyba: Produktų rekomendavimas vartotojams pagal jų ankstesnius pirkimus ir naršymo istoriją. Pavyzdžiui, vartotojui Vokietijoje, perkančiam žygių įrangą, gali būti rekomenduojami tinkami drabužiai, vietinių takų žemėlapiai ar susijusios knygos.
- Žiniasklaida ir pramogos: Filmų, TV laidų ir muzikos rekomendavimas vartotojams pagal jų žiūrėjimo ir klausymosi įpročius. Vartotojui Japonijoje, mėgstančiam anime, gali būti rekomenduojami nauji serialai, panašūs žanrai ar susijusios prekės.
- Socialiniai tinklai: Draugų, grupių ir turinio rekomendavimas vartotojams pagal jų interesus ir socialinius ryšius. Vartotojui Brazilijoje, besidominčiam futbolu, gali būti rekomenduojami vietiniai futbolo klubai, susiję naujienų straipsniai ar fanų grupės.
- Švietimas: Kursų ir mokymosi medžiagos rekomendavimas studentams pagal jų mokymosi tikslus ir akademinius rezultatus. Studentui Indijoje, studijuojančiam informatiką, gali būti rekomenduojami internetiniai kursai, vadovėliai ar moksliniai straipsniai.
- Kelionės ir turizmas: Kelionių krypčių, viešbučių ir veiklų rekomendavimas keliautojams pagal jų pageidavimus ir kelionių istoriją. Turistui iš JAV, planuojančiam kelionę į Italiją, gali būti rekomenduojami populiarūs lankytini objektai, restoranai ar vietiniai renginiai.
Globalūs Aspektai
Kuriant rekomendacijų sistemas globaliai auditorijai, svarbu atsižvelgti į šiuos veiksnius:
- Kultūriniai skirtumai: Vartotojų pageidavimai gali labai skirtis įvairiose kultūrose. Svarbu suprasti šiuos skirtumus ir atitinkamai pritaikyti rekomendacijas. Pavyzdžiui, mitybos rekomendacijos vartotojui JAV gali skirtis nuo rekomendacijų vartotojui Kinijoje.
- Kalbos palaikymas: Rekomendacijų sistema turėtų palaikyti kelias kalbas, kad atitiktų skirtingų lingvistinių grupių vartotojų poreikius.
- Duomenų privatumas: Svarbu laikytis duomenų privatumo taisyklių skirtingose šalyse. Pavyzdžiui, Bendrasis duomenų apsaugos reglamentas (BDAR) Europos Sąjungoje reikalauja, kad organizacijos gautų aiškų vartotojų sutikimą prieš renkant ir tvarkant jų asmeninius duomenis.
- Laiko juostos: Atsižvelkite į skirtingas laiko juostas planuojant rekomendacijas ir siunčiant pranešimus.
- Prieinamumas: Užtikrinkite, kad rekomendacijų sistema būtų prieinama vartotojams su negalia.
Išvada
Matricos faktorizacija yra galinga technika rekomendacijų sistemoms kurti. Suprasdami pagrindinius principus ir naudodami „Python“ bibliotekas, tokias kaip „Surprise“, galite sukurti efektyvias rekomendacijų sistemas, kurios personalizuoja vartotojų patirtį ir skatina įsitraukimą. Nepamirškite atsižvelgti į tokius veiksnius kaip hiperparametrų derinimas, reguliarizacija, „šalto starto“ problemų sprendimas ir mastelio keitimas, siekiant optimizuoti jūsų rekomendacijų sistemos našumą. Globalioms programoms atkreipkite dėmesį į kultūrinius skirtumus, kalbos palaikymą, duomenų privatumą, laiko juostas ir prieinamumą, kad užtikrintumėte teigiamą vartotojo patirtį visiems.
Tolimesnės Studijos
- „Surprise“ bibliotekos dokumentacija: http://surpriselib.com/
- „MovieLens“ duomenų rinkinys: https://grouplens.org/datasets/movielens/
- Matricos faktorizacijos technikos: Tyrinėkite skirtingas matricos faktorizacijos variacijas ir optimizacijas kolaboratyviniam filtravimui.